package org.achao.consumer;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * @author achao
 * @description 消费测试<br>
 * 使用RabbitMq官网案例
 * @date 2023/10/25 22:14
 */
public class Consumer {

    /**
     * 简单mq快速入门（先跳过交换机）
     * 生产者 --> 队列 --> 消费者
     * 此处为消费者代码
     */
    public static void main(String[] args) {
        // 1. 创建连接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("121.37.241.70");
        connectionFactory.setUsername("achao");
        connectionFactory.setPassword("125614");

        try {
            // 2. 创建连接
            Connection connection = connectionFactory.newConnection();
            // 3. 创建信道
            Channel channel = connection.createChannel();
            System.out.println("等待消息中...");

            //推送的消息如何进行消费的接口回调
            DeliverCallback deliverCallback=(consumerTag, delivery)->{
                String message= new String(delivery.getBody());
                System.out.println(message);
            };
            //取消消费的一个回调接口 如在消费的时候队列被删除掉了
            CancelCallback cancelCallback=(consumerTag)->{
                System.out.println("消息消费被中断");
            };

            // 4. 消费消息
            /**
             * - 消费哪个队列
             * - 消费成功之后是否要自动应答 true标识自动应答 false标识手动应答
             * - 消费者未成功消费时的回调
             * - 消费者消费被终端时的回调
             */
            channel.basicConsume("hello",true,deliverCallback,cancelCallback);
        } catch (IOException | TimeoutException e) {
            throw new RuntimeException(e);
        }
    }
}
